import type { Linter } from "eslint";

import { interopDefault } from "../util";

export async function node(): Promise<Linter.Config[]> {
  const pluginNode = await interopDefault(import("eslint-plugin-n"));

  return [
    {
      plugins: {
        n: pluginNode,
      },
      rules: {
        "n/handle-callback-err": ["error", "^(err|error)$"],
        "n/no-deprecated-api": "error",
        "n/no-exports-assign": "error",
        "n/no-extraneous-import": [
          "error",
          {
            allowModules: [
              "unbuild",
              "@vben/vite-config",
              "vitest",
              "vite",
              "@vue/test-utils",
              "@vben/tailwind-config",
              "@playwright/test",
            ],
          },
        ],
        "n/no-new-require": "error",
        "n/no-path-concat": "error",
        // 'n/no-unpublished-import': 'off',
        "n/no-unsupported-features/es-syntax": [
          "error",
          {
            ignores: [],
            version: ">=18.0.0",
          },
        ],
        "n/prefer-global/buffer": ["error", "never"],
        // 'n/no-missing-import': 'off',
        "n/prefer-global/process": ["error", "never"],
        "n/process-exit-as-throw": "error",
      },
    },
    {
      files: [
        "scripts/**/*.?([cm])[jt]s?(x)",
        "internal/**/*.?([cm])[jt]s?(x)",
      ],
      rules: {
        "n/prefer-global/process": "off",
      },
    },
  ];
}
